package com.java8.MethodRef;

import java.util.ArrayList;
import java.util.Collections;

/**
 * 引用成员方法:
 * 其他类::方法名
 */
public class demo_2 {
    //目标:过滤数据（只要以张开头，而且名字是3个字的）
    public static void main(String[] args) {
        //1.创建集合
        ArrayList<String> list = new ArrayList<>();
        //2.添加数据
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");
        //(1)传统：匿名内部类形式（函数式接口）
      /*  list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张") && s.length() == 3;   //是否留下（true留下）
            }
        }).forEach(s-> System.out.println(s));*/
        //(2)Lambda 表达式写法
        //list.stream().filter(s->s.startsWith("张")).filter(s->s.length() == 3).forEach(s-> System.out.println(s));

        //方法引用( 对象::实例方法)
        list.stream().filter(new demo_2()::checkName)
                .forEach(s-> System.out.println(s));
        //等价于
        /*  StringOperation so = new StringOperation();
        list.stream().filter(so::stringJudge)
                .forEach(s-> System.out.println(s));*/

        //不能用,因为这里是静态方法
//        list.stream().filter(this::checkName)
//                .forEach(s-> System.out.println(s));
    }
    public boolean checkName(String name){
        return name.startsWith("张")&&name.length()==3;
    }
}
